#define _CRT_SECURE_NO_WARNINGS 1
#include"string.h"
//#include<string.h>
//#include<list>
//void test_string1()
//{
//	string s1;
//	//string s2("hello world!!!");
//	// string (const char* s);
//	string s2 = "hello world!!!";
//	cout << s1 << endl;
//	cout << s2 << endl;
//
//	string s3(s2);
//	cout << s3 << endl;
//
//	string s4(s2, 6, 5);
//	cout << s4 << endl;
//
//	// 第三个参数len大于后面字符长度，有多少拷贝多少拷贝到结尾
//	string s5(s2, 6, 15);
//	cout << s5 << endl;
//	string s6(s2, 6);
//	cout << s6 << endl;
//
//	string s7("hello world", 5);
//	cout << s7 << endl;
//
//	string s8(100, 'x');
//	cout << s8 << endl;
//
//	//cin >> s1 >> s2;
//	//cout << s1 << endl;
//	//cout << s2 << endl;
//}
//void test_string3()
//{
//	string s1("hello world");
//	cout << s1[0] << endl;
//	s1[0] = 'x';
//	cout << s1[0] << endl;
//	cout << s1 << endl;
//
//	// 要求遍历string，每个字符+1
//	for (size_t i = 0; i < s1.size(); ++i)
//		//for (size_t i = 0; i < s1.length(); ++i)
//	{
//		s1[i]++;
//	}
//	cout << s1 << endl;
//
//	const string s2("world");
//	for (size_t i = 0; i < s2.size(); ++i)
//	{
//		//s2[i]++;
//		cout << s2[i] << " ";
//	}
//	cout << endl;
//	cout << s2 << endl;
//
//	//s2[6];  内部会检查越界
//}
//void test_string4()
//{
//	string s("hello");
//	string::iterator it = s.begin();
//	while (it != s.end())
//	{
//		(*it)++;
//		cout << *it << " ";
//		++it;
//	}
//	cout << endl;
//
//	// 范围for -- 自动迭代，自动判断结束
//	// 依次取s中每个字符，赋值给ch
//	/*for (auto ch : s)
//	{
//		ch++;
//		cout << ch << " ";
//	}*/
//	for (auto& ch : s)
//	{
//		ch++;
//		cout << ch << " ";
//	}
//	cout << endl;
//
//	cout << s << endl;
//
//	list<int> lt(10, 1);
//	list<int>::iterator lit = lt.begin();
//	while (lit != lt.end())
//	{
//		cout << *lit << " ";
//		++lit;
//	}
//	cout << endl;
//
//	for (auto e : lt)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	// 范围for底层其实就是迭代器
//}
//void PrintString(const string& str)
//{
//	//string::const_iterator it = str.begin();
//	auto it = str.begin();
//	while (it != str.end())
//	{
//		//*it = 'x';
//		cout << *it << " ";
//		++it;
//	}
//	cout << endl;
//
//	//auto rit = str.begin();
//	//反向迭代器
//	string::const_reverse_iterator rit = str.rbegin();
//	while (rit != str.rend())
//	{
//		cout << *rit << " ";
//		++rit;
//	}
//	cout << endl;
//}
//
//void test_string5()
//{
//	string s("hello");
//	string::reverse_iterator rit = s.rbegin();
//	while (rit != s.rend())
//	{
//		cout << *rit << " ";
//		++rit;
//	}
//	cout << endl;
//
//	PrintString(s);
//}
//
//void test_string6()
//{
//	string s("hello");
//	s.push_back('-');
//	s.push_back('-');
//	s.append("world");
//	cout << s << endl;
//
//	string str("我来了");
//	s += '@';
//	s += str;
//	s += "!!!";
//	cout << s << endl;
//
//	s.append(++str.begin(), --str.end());
//	cout << s << endl;
//
//	//string copy(++s.begin(), --s.end());
//	string copy(s.begin() + 5, s.end() - 5);
//	cout << copy << endl;
//}
//void test_string7()
//{
//	//string s1;
//	//string s2("11111111111111");
//	//cout << s1.max_size() << endl;
//	//cout << s2.max_size() << endl;
//
//	//cout << s2.capacity() << endl;
//
//	string s;
//	// reverse 逆置
//	s.reserve(1000); //保留 开空间
//	//s.resize(1000, 'x');    //     开空间 + 初始化
//	size_t sz = s.capacity();
//	sz = s.capacity();
//	cout << "capacity changed: " << sz << '\n';
//	cout << "making s grow:\n";
//	for (int i = 0; i < 1000; ++i)
//	{
//		s.push_back('c');
//		if (sz != s.capacity())
//		{
//			sz = s.capacity();
//			cout << "capacity changed: " << sz << '\n';
//		}
//	}
//}
//void test_string9()
//{
//	string filename("test.cpp");
//	cout << filename << endl;
//	cout << filename.c_str() << endl;
//
//	FILE* fout = fopen(filename.c_str(), "r");
//	assert(fout);
//	char ch = fgetc(fout);
//	while (ch != EOF)
//	{
//		cout << ch;
//		ch = fgetc(fout);
//	}
//}
//void DealUrl(const string& url)
//{
//	size_t pos1 = url.find("://");
//	if (pos1 == string::npos)
//	{
//		cout << "非法url" << endl;
//		return;
//	}
//	string protocol = url.substr(0, pos1);
//	cout << protocol << endl;
//
//	size_t pos2 = url.find('/', pos1 + 3);
//	if (pos2 == string::npos)
//	{
//		cout << "非法url" << endl;
//		return;
//	}
//	string domain = url.substr(pos1 + 3, pos2 - pos1 - 3);
//	cout << domain << endl;
//
//	string uri = url.substr(pos2 + 1);
//	cout << uri << endl << endl;
//}
//
//void test_string11()
//{
//	string filename("test.cpp.tar.zip");
//	// 后缀
//	//size_t pos = filename.find('.');
//	size_t pos = filename.rfind('.');
//	if (pos != string::npos)
//	{
//		//string suff = filename.substr(pos, filename.size() - pos);
//		string suff = filename.substr(pos);
//
//		cout << suff << endl;
//	}
//
//	string url1 = "https://cplusplus.com/reference/string/string/";
//	string url2 = "https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=ascall&step_word=&hs=0&pn=0&spn=0&di=7108135681917976577&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=0&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=undefined&cs=2613959014%2C543572025&os=2740573600%2C1059518451&simid=2613959014%2C543572025&adpicid=0&lpn=0&ln=179&fr=&fmq=1660115697093_R&fm=&ic=undefined&s=undefined&hd=undefined&latest=undefined&copyright=undefined&se=&sme=&tab=0&width=undefined&height=undefined&face=undefined&ist=&jit=&cg=&bdtype=0&oriquery=&objurl=https%3A%2F%2Fgimg2.baidu.com%2Fimage_search%2Fsrc%3Dhttp%3A%2F%2Fimg.php.cn%2Fupload%2Fimage%2F147%2F157%2F796%2F1593765739620093.png%26refer%3Dhttp%3A%2F%2Fimg.php.cn%26app%3D2002%26size%3Df9999%2C10000%26q%3Da80%26n%3D0%26g%3D0n%26fmt%3Dauto%3Fsec%3D1662707704%26t%3Da68cb238bbb3f99d0554098c785d526e&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3Brir_z%26e3BvgAzdH3FuwqAzdH3F9c9amd_z%26e3Bip4s&gsm=1&rpstart=0&rpnum=0&islist=&querylist=&nojc=undefined&dyTabStr=MCwzLDIsNCw2LDEsNSw3LDgsOQ%3D%3D";
//	string url3 = "ftp://ftp.cs.umd.edu/pub/skipLists/skiplists.pdf";
//
//	DealUrl(url1);
//	DealUrl(url2);
//	DealUrl(url3);
//}
//int main()
//{
//	test_string11();
//	return 0;
//}



int main()
{
	try
	{
		bit::test_string1();
	}
	catch (const exception& e)
	{
		cout << e.what() << endl;
	}
	return 0;
}